// 导入Three.js相关模块
import {
  IcosahedronGeometry,      // 二十面体几何体（用于创建复杂形状）
  Mesh,                     // 网格对象（组合几何体与材质）
  MeshNormalMaterial,       // 法线材质（调试用）
  MeshStandardMaterial,     // PBR标准材质（支持金属/粗糙度）
} from 'three'
import Entity from './Entity' // 基础实体类

// 创建共享几何体（所有岩石实例共用）
const GEOMETRY = new IcosahedronGeometry(0.5)  // 基础半径0.5的二十面体

// 创建共享材质（所有岩石实例默认使用相同材质）
const MATERIAL = new MeshStandardMaterial({
  color: 0xacacac,          // 默认岩石灰色
  flatShading: true,        // 平面着色（增强低多边形风格）
})

// 岩石类（继承基础实体类）
export default class Rock extends Entity {
  constructor(resolution, color) {
    // 创建网格实例（几何体+材质）
    const mesh = new Mesh(GEOMETRY, MATERIAL)
    
    // X轴：0.5~1倍随机缩放（横向随机宽度）
    // Y轴：0.5~2.4倍缩放（使用平方让更多岩石较矮）
    // Z轴：保持1倍（前后方向不变形）
    mesh.scale.set(
      Math.random() * 0.5 + 0.5, 
      0.5 + Math.random() ** 2 * 1.9, 
      1
    )

    mesh.rotation.y = Math.random() * Math.PI * 2 // 随机Y轴旋转（0-360度）
    mesh.rotation.x = Math.random() * Math.PI * 0.1 // 轻微X轴倾斜（最大18度）
    mesh.rotation.order = 'YXZ' // 旋转顺序：先Y后X最后Z（避免万向锁问题）

    // 下沉位置（使岩石看起来半埋在地面）
    mesh.position.y = -0.5

    // 如果指定颜色，覆盖默认材质颜色
    if (color) {
      MATERIAL.color.set(color)
    }

    // 调用父类构造函数（处理坐标转换等）
    super(mesh, resolution)
  }
}